package tech.aistar.day10.syn;

/**
 * 本类用来演示:
 *
 * @author: success
 * @date: 2022/8/1 1:47 下午
 */
public class SynMethodDemo2 extends Thread{
    @Override
    public void run() {
        test2();
    }

    //修饰普通方法 - "对象锁" - 不同的对象竞争的是不同的"锁".
    public synchronized void test(){
        //在某个时刻,只能由一个线程进入.
        System.out.println(Thread.currentThread().getName()+":enter~");
        try {
            //故意睡一秒,"嘚瑟一会"
            Thread.sleep(1000);//让出cpu.但是不会释放锁
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+":leave~");
    }

    //修饰静态方法 - "类锁" - 该类下的不同的对象竞争的是同一把"锁"
    public static synchronized void test2(){
        //在某个时刻,只能由一个线程进入.
        System.out.println(Thread.currentThread().getName()+":enter2~");
        try {
            //故意睡一秒,"嘚瑟一会"
            Thread.sleep(1000);//让出cpu.但是不会释放锁
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+":leave2~");
    }
}
class Demo2Test{
    public static void main(String[] args) {
        Thread t1 = new SynMethodDemo2();
        Thread t2 = new SynMethodDemo2();
        t1.start();
        t2.start();
    }
}
